package org.dromara.admin.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

/**
 * 结算状态枚举：未结清(UNPAID)、部分结清(PARTIAL)、已结清(PAID)
 */
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT) // ✅ 序列化为对象形式（code + info）
public enum SettlementStatusEnum {

    UNPAID("UNPAID", "未结清"),
    PARTIAL("PARTIAL", "部分结清"),
    PAID("PAID", "已结清");

    /**
     * 数据库存储值
     */
    @EnumValue
    @JsonValue
    private final String code;
    private final String info;

    SettlementStatusEnum(String code, String info) {
        this.code = code;
        this.info = info;
    }

    /**
     * 前端传 code 时反序列化
     */
    @JsonCreator
    public static SettlementStatusEnum fromCode(String code) {
        if (code == null) return null;
        for (SettlementStatusEnum e : values()) {
            if (e.code.equalsIgnoreCase(code)) {
                return e;
            }
        }
        return null;
    }

    /**
     * ✅ 返回前端时使用对象结构（code + info）
     */
    @JsonValue
    public Map<String, String> toJson() {
        Map<String, String> map = new HashMap<>();
        map.put("code", this.code);
        map.put("info", this.info);
        return map;
    }
}
